﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Security.Cryptography;

namespace OffLineFilter
{
    public class ColorTable
    {
        private String fileName;
        public String FileName
        {
            get { return FileName; }
        }

        private Dictionary<Guid, Color> table;

        public void Load()
        {
            String[] lines = File.ReadAllLines(fileName, Encoding.Default);
            table = new Dictionary<Guid, Color>();
            foreach (String line in lines)
            {
                String[] columns = line.Split('\t');

                // ключ - MD5(часть речи + граммемы)
                // значение - цвет
                String key = columns[0] + columns[1];
                MD5 md5 = new MD5Cng();
                Guid hash = md5.ComputeHash(key);

                String r = columns[2];
                String g = columns[3];
                String b = columns[4];
                Color color = Color.FromArgb(Convert.ToInt32(r), Convert.ToInt32(g), Convert.ToInt32(b));

                if (table.ContainsKey(hash))
                    table[hash] = color;
                else
                    table.Add(hash, color);
            }
        }

        public ColorTable(String fileName)
        {
            if (String.IsNullOrWhiteSpace(fileName))
                throw new ArgumentException("Необходимо указать имя файла с таблицей цветности!");
            this.fileName = fileName;
        }

        public Color this[String key]
        {
            get
            {
                MD5 md5 = new MD5Cng();
                Guid hash = md5.ComputeHash(key);

                if (table.ContainsKey(hash))
                    return table[hash];
                return Color.Black;
            }
        }
    }


}
